package ipdesk.model.report.promote.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


import ipdesk.model.report.consult.bean.ConsultInfoBean;
import ipdesk.model.report.promote.bean.PromoteInfoBean;
import org.apache.commons.lang3.StringUtils;

import com.ibatis.dao.client.DaoManager;
import com.ibatis.dao.client.template.SqlMapDaoTemplate;
import com.opensymphony.xwork2.ActionContext;

import ecg.util.SessionUtils;


public class PromoteInfoImpl extends SqlMapDaoTemplate implements IPromoteInfo
{
	public PromoteInfoImpl(DaoManager manager)
	{
		super(manager);	
	}
	
	public int promoteInfoReg(PromoteInfoBean promoteInfoBean) throws Exception
	{
		int promoteCodeCount = 0;
		int lastPromoteSeq = 0;
		String promoteCode = "";
		
		String promoteDate = promoteInfoBean.getPromoteDate();
		String deskCode = promoteInfoBean.getDeskCode();
		
		// 관리코드를 생성하기 위해 등록날짜와 데스크 코드를 조건으로 한 데이터의 갯수를 가지고온다.
		promoteCodeCount = ((Integer)this.queryForObject("promote.promoteCode-count", promoteInfoBean)).intValue();
				
		String endNumber = StringUtils.leftPad(Integer.toString(promoteCodeCount+1), 4, "0");
		
		// 생성된 관리코드.
		promoteCode = promoteDate.replaceAll("-","") + "-" + deskCode.substring(4) + "-PRM-" + endNumber;
		
		
		// 생성된 침해조사일지 관리코드 빈 객체에 저장.
		promoteInfoBean.setManageNo(promoteCode);
		
		promoteInfoBean.setUserSeq(Integer.parseInt(SessionUtils.getLoginSession().get("userSeq")));
		
		
		// iBatis 연동. 데이터 insert.
		lastPromoteSeq = ((Integer)this.insert("promote.promoteInfoInsert", promoteInfoBean)).intValue();
		
		return lastPromoteSeq;
	}
	
	public void insertFileData(PromoteInfoBean promoteInfoBean)
	{
		// iBatis 연동. 데이터 insert.
		this.insert("promote.promoteFileInfoInsert", promoteInfoBean);
	}
	
	public int getDataTotalCount(PromoteInfoBean promoteInfoBean) throws Exception
	{
		Map map = new HashMap();
		map.put("userSeq", SessionUtils.getLoginSession().get("userSeq"));
		map.put("authCode", SessionUtils.getLoginSession().get("authCode"));
		
		// 관리자가 아닐경우에는 세션에 있는 deskCode를 맵에 저장한다.
		if(SessionUtils.getLoginSession().get("authCode") != "ADMIN")
		{
			if(promoteInfoBean.getDeskCode() == null || "".equals(promoteInfoBean.getDeskCode())){
				map.put("deskCode", SessionUtils.getLoginSession().get("deskCode"));
			}else{
				map.put("deskCode", promoteInfoBean.getDeskCode());
			}
		}
		
		int totalDataCount = ((Integer)this.queryForObject("promote.promoteInfoTotalcount", map)).intValue();
		
		return totalDataCount;
	}
	
	/**
	 * 센터별 전체 데이터를 가져오는 메서드.
	 * 
	 */
	public List<PromoteInfoBean> getPagingDataList(Map map) throws Exception
	{
		map.put("userSeq", SessionUtils.getLoginSession().get("userSeq"));
		map.put("authCode", SessionUtils.getLoginSession().get("authCode"));
		
		// 관리자가 아닐경우에는 세션에 있는 deskCode를 맵에 저장한다.
		if(!SessionUtils.getLoginSession().get("authCode").equals("ADMIN"))
		{
			map.put("deskCode", SessionUtils.getLoginSession().get("deskCode"));
		}
		
		List<PromoteInfoBean> pageDataList = this.queryForList("promote.promotePageDataList", map);
		
		return pageDataList;
	}
	
	/**
	 *  해당 promoteSeq의 하나의 로우 데이터를 가지고온다.
	 *  
	 */
	public PromoteInfoBean getDataOneRow(int promoteSeq, String queryId)
	{
		PromoteInfoBean promoteInfoBean = (PromoteInfoBean)this.queryForObject(queryId, promoteSeq);
		
		return promoteInfoBean;
	}
	
	/**
	 * 해당 promoteSeq의 하나의 로우를 삭제한다.
	 */
	public void deleteDataOneRow(int promoteSeq,  String queryId)
	{
		this.delete(queryId, promoteSeq);
	}
	
	/**
	 * 해당 promoteSeq의 하나의 로우를 업데이트 한다.
	 * @param promoteInfoBean
	 * @param queryId
	 * @return
	 */
	public int promoteInfoUpdate(PromoteInfoBean promoteInfoBean, String queryId)
	{
		int result = this.update(queryId, promoteInfoBean);
		
		return result;
	}
}
